<?php
// +----------------------------------------------------------------------
// | RXThinkCMF框架 [ RXThinkCMF ]
// +----------------------------------------------------------------------
// | 版权所有 2017~2021 南京RXThinkCMF研发中心
// +----------------------------------------------------------------------
// | 官方网站: http://www.rxthink.cn
// +----------------------------------------------------------------------
// | Author: 牧羊人 <1175401194@qq.com>
// +----------------------------------------------------------------------

namespace app\admin\widget;


use think\facade\Db;
use think\facade\View;
use think\template\TagLib;

/**
 * 常规标签组件
 * @author 牧羊人
 * @since: 2020/6/30
 * Class Common
 * @package app\admin\taglib
 */
class Common extends TagLib
{
    // 自定义标签列表
    protected $tags = [
        'switch' => ['attr' => 'name,title,value', 'close' => 0],
        'select' => ['attr' => 'name,data,value', 'close' => 0],
        'radio' => ['attr' => 'name,data,value', 'close' => 0],
    ];

    /**
     * 开关组件标签
     * @param $tag 标签参数
     * @return string
     * @author 牧羊人
     * @since: 2020/6/30
     */
    public function tagSwitch($tag)
    {
        // 取消模板布局
        app()->view->layout(false);
        // 标签名称
        $name = trim($tag['name']);
        // 标签标题
        $title = trim($tag['title']);
        // 标签选中值
        $value = $tag['value'];
        // 隐藏域标识
        $hidden = isset($tag['hidden']) ? trim($tag['hidden']) : "";

        // 绑定数组
        View::assign("switchName", $name);
        View::assign("switchFilter", str_replace("_", "", $name));
        View::assign("switchTitle", $title);
        View::assign("switchValue", "<?php echo $value?>");
        View::assign("switchHidden", $hidden);
        View::assign("switchChecked", "<?php echo ($value)==1 ? 'checked=\"\"' : '' ?>");
        return View::fetch("widget/switch_check");
    }

    /**
     * 下拉单选标签
     * @param $tag 标签参数
     * @return string
     * @author 牧羊人
     * @since 2020/7/1
     */
    public function tagSelect($tag)
    {
        // 标签参数
        $param = $tag['param'];
        // 数据源
        $data = $tag['data'];
        // 选中值
        $value = $tag['value'];
        // 数据源解析
        $list = [];
        if (strpos($data, "=") !== false) {
            $result = explode(",", $data);
            $vData = [];
            foreach ($result as $v) {
                $subItem = explode("=", $v);
                $vData[$subItem[0]] = $subItem[1];
            }
            $data = $vData;
        }

        // 拆分标签名
        $item = explode('|', $param);
        $name = strpos(trim($item[0]), "$") !== false ? ("{" . trim($item[0]) . "}") : trim($item[0]);
        $isRequire = $item[1];
        $showTips = $item[2];
        $showName = $item[3];
        $showValue = $item[4];
        
        $parse = "<select name=\"{$name}\" id=\"{$name}\" {if $isRequire==1}lay-verify=\"required\"{/if} lay-search=\"\" lay-filter=\"{$name}\">";
        $parse .= "<option value=\"\">【请选择{$showTips}】</option>";
        if (is_array($data)) {
            // 直接传入数据源
            foreach ($data as $key => $val) {
                if (is_array($val)) {
                    $parse .= '<option value="' . $val["{$showValue}"] . '" <?php echo (' . $value . ')==' . $val["{$showValue}"] . ' ? "selected=\"\"" : null ?> >' . $val["{$showName}"] . '</option>';
                } else {
                    $parse .= '<option value="' . $key . '" <?php echo (' . $value . ')==' . $key . ' ? "selected=\"\"" : null ?>>' . $val . '</option>';
                }
            }

        } else {
            // 动态解析绑定参数
            $parse .= '<?php ';
            $parse .= 'foreach(' . $data . ' as $key => $val){';
            $parse .= '?>';
            $parse .= '<?php if(is_array($val)) {?>';
            $parse .= '<option value="{$val["' . $showValue . '"]}" <?php echo (' . $value . ')==$val["' . $showValue . '"] ? "selected=\"\"" : null ?> >{$val["' . $showName . '"]}</option>';
            $parse .= '<?php } else { ?>';
            $parse .= '<option value="{$key}" <?php echo (' . $value . ')==$key ? "selected=\"\"" : null ?> >{$val}</option>';
            $parse .= '<?php } ?>';
            $parse .= '<?php } ?>';
        }
        $parse .= "</select>";
        return $parse;
    }

    /**
     * 单选按钮组件
     * @param $tag 组件标签
     * @return string
     * @author 牧羊人
     * @since 2020/8/22
     */
    public function tagRadio($tag)
    {
        // 标签参数
        $param = $tag['param'];
        // 数据源
        $data = $tag['data'];
        // 选中值
        $value = $tag['value'];

        // 数据源解析
        $list = [];
        if (strpos($data, "=") !== false) {
            $result = explode(",", $data);
            $vData = [];
            foreach ($result as $v) {
                $subItem = explode("=", $v);
                $vData[$subItem[0]] = $subItem[1];
            }
            $data = $vData;
        }

        // 拆分标签名
        $item = explode('|', $param);
        $name = strpos(trim($item[0]), "$") !== false ? ("{" . trim($item[0]) . "}") : trim($item[0]);
        $showName = $item[1];
        $showValue = $item[2];

        // 创建组件内容
        $parse = '';
        if (is_array($data)) {
            // 直接传入数据源
            foreach ($data as $key => $val) {
                if (is_array($val)) {
                    $parse .= '<input type="radio" name="' . $name . '" value="' . $val["{$showValue}"] . '" title="' . $val["{$showName}"] . '" <?php echo (' . $value . ')==' . $val["{$showValue}"] . ' ? "checked=\"\"" : null ?>>';
                } else {
                    $parse .= '<input type="radio" name="' . $name . '" value="' . $key . '" title="' . $val . '" <?php echo (' . $value . ')==' . $key . ' ? "checked=\"\"" : null ?>>';
                }
            }
        } else {
            // 动态解析绑定参数
            $parse .= '<?php ';
            $parse .= 'foreach(' . $data . ' as $key => $val){';
            $parse .= '?>';
            $parse .= '<?php if(is_array($val)) {?>';
            $parse .= '<input type="radio" name="' . $name . '" value="{$val["' . $showValue . '"]}" title="{$val["' . $showName . '"]}" <?php echo (' . $value . ')==$val["' . $showValue . '"] ? "checked=\"\"" : null ?>>';
            $parse .= '<?php } else { ?>';
            $parse .= '<input type="radio" name="' . $name . '" value="{$key}" title="{$val}" <?php echo (' . $value . ')==$key ? "checked=\"\"" : null ?>>';
            $parse .= '<?php } ?>';
            $parse .= '<?php } ?>';
        }
        $parse .= "</select>";
        return $parse;
    }

}